/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/*
 * RegistroNeumatico.java
 *
 * Created on 29-abr-2012, 21:45:28
 */
package com.camachosanchez.gui;

import com.camachosanchez.bean.*;
import com.camachosanchez.controler.jdbc.NeumaticosJdbcControler;
import com.camachosanchez.controler.jpa.AlmacenesJpaController;
import com.camachosanchez.controler.jpa.DistribuidoresNeumaticosJpaController;
import com.camachosanchez.controler.jpa.EstadosNeumaticosJpaController;
import com.camachosanchez.controler.jpa.FormasPagoJpaController;
import com.camachosanchez.controler.jpa.MarcasNeumaticoJpaController;
import com.camachosanchez.controler.jpa.ModelosBandaNeumaticoJpaController;
import com.camachosanchez.controler.jpa.NeumaticosJpaController;
import com.camachosanchez.controler.jpa.TipoPisoJpaController;
import com.camachosanchez.controler.jpa.TiposBandaNeumaticoJpaController;
import com.camachosanchez.gui.textfield.MaxLengthTextDocument;
import com.camachosanchez.util.Constantes;
import com.camachosanchez.util.GUIUtil;
import com.camachosanchez.util.JPAUtil;
import java.awt.event.KeyEvent;
import java.util.Date;
import java.util.List;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Query;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JOptionPane;
import javax.swing.SpinnerModel;
import javax.swing.SpinnerNumberModel;

/**
 *
 * @author Rolando
 */
public class EditorNeumatico extends javax.swing.JDialog {

    private Neumaticos neumatico;
    private BusquedaNeumatico buscador;
    private int fila = 0;

    /**
     * Creates new form RegistroNeumatico
     */
    public EditorNeumatico(BusquedaNeumatico buscador, java.awt.Frame parent, boolean modal, Neumaticos neumatico, int fila) {
        super(parent, modal);
        initComponents();
        dateFechaRegistro.setDate(new Date());
        llenarListasDesplegables();
//        setModal(modal);
        MaxLengthTextDocument doc_codigo = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_numserie = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_numfactura = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_codbarras = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_profundidad = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_kilometros = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_profundidad_min = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_presion_min = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_precio = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_garantia_dias = new MaxLengthTextDocument();
        MaxLengthTextDocument doc_garantia_km = new MaxLengthTextDocument();
        doc_codigo.setMaxChars(20, Constantes.CADENAS);
        doc_numserie.setMaxChars(15, Constantes.CADENAS);
        doc_numfactura.setMaxChars(20, Constantes.CADENAS);
        doc_codbarras.setMaxChars(45, Constantes.CADENAS);
        doc_profundidad.setMaxChars(10, Constantes.DECIMALES);
        doc_profundidad_min.setMaxChars(10, Constantes.DECIMALES);
        doc_presion_min.setMaxChars(10, Constantes.DECIMALES);
        doc_precio.setMaxChars(10, Constantes.DECIMALES);
        doc_kilometros.setMaxChars(10, Constantes.ENTEROS);
        doc_garantia_dias.setMaxChars(10, Constantes.ENTEROS);
        doc_garantia_km.setMaxChars(10, Constantes.ENTEROS);
        txtCodigo.setDocument(doc_codigo);
        txtNumeroSerie.setDocument(doc_numserie);
        txtNumeroFactura.setDocument(doc_numfactura);
        txtCodigoBarras.setDocument(doc_codbarras);
        txtProfundidad.setDocument(doc_profundidad);
        txtProfundidadMinima.setDocument(doc_profundidad_min);
        txtPresionMinima.setDocument(doc_presion_min);
        txtPrecio.setDocument(doc_precio);
        txtRecorrido.setDocument(doc_kilometros);
        txtGarantiaDias.setDocument(doc_garantia_dias);
        txtGarantiaKM.setDocument(doc_garantia_km);
        SpinnerModel smDespinches = new SpinnerNumberModel(0, 0, 100, 1);
        SpinnerModel smNumeroCapas = new SpinnerNumberModel(0, 0, 100, 1);
        SpinnerModel smRenovaciones = new SpinnerNumberModel(0, 0, 100, 1);
        spnDespinches.setModel(smDespinches);
        spnNumeroCapas.setModel(smNumeroCapas);
        spnRenovaciones.setModel(smRenovaciones);
        //Llenar datos del neumático
        if (neumatico != null) {
            int id_categoria = neumatico.getIdCategoria().getId();
            //envía a bodega cuando está en stock o enviado a reparación
            if (id_categoria == Constantes.CATEGORIA_STOCK || id_categoria == Constantes.CATEGORIA_REPARACION) {
                btnABodega.setEnabled(true);
            } else {
                btnABodega.setEnabled(false);
            }
            //regresa a stock cuando está en bodega provicional, en reparación, en cementerio, o para reencauche
            if (id_categoria == Constantes.CATEGORIA_BODEGA || id_categoria == Constantes.CATEGORIA_REPARACION || id_categoria == Constantes.CATEGORIA_PARA_REENCAUCHE) {
                btnAStock.setEnabled(true);
            } else {
                btnAStock.setEnabled(false);
            }
            
            //para enviar a la lista de neumáticos listos para reencauche
            if (id_categoria == Constantes.CATEGORIA_STOCK || id_categoria == Constantes.CATEGORIA_BODEGA || id_categoria == Constantes.CATEGORIA_REPARACION || id_categoria == Constantes.CATEGORIA_RECLAMO) {
                btnParaReencauche.setEnabled(true);
            } else {
                btnParaReencauche.setEnabled(false);
            }
            
            //para enviar a devolución por garantía
            if (id_categoria == Constantes.CATEGORIA_STOCK || id_categoria == Constantes.CATEGORIA_BODEGA) {
                btnDevolucion.setEnabled(true);
            } else {
                btnDevolucion.setEnabled(false);
            }
            
            //para ver la ubicación actual del neumático cocn categoría montado
            if (id_categoria == Constantes.CATEGORIA_MONTADO) {
                btnUbicacion.setEnabled(true);
            } else {
                btnUbicacion.setEnabled(false);
            }
//            System.out.println(neumatico.getCodigo().trim());
            txtCodigo.setText(neumatico.getCodigo().trim());
            txtNumeroSerie.setText(neumatico.getNumSerie());
            txtNumeroFactura.setText(neumatico.getNumFactura());
            txtCodigoBarras.setText(neumatico.getCodBarras());
            dateFechaRegistro.setDate(neumatico.getFechaRegistro());
            cmbEstados.setSelectedItem(neumatico.getIdEstado());
            txtEstadoMedicion.setText(neumatico.getIdEstadoMedicion().getNombre());
            cmbMarca.setSelectedItem(neumatico.getIdMarca());
            cmbTipoPiso.setSelectedItem(neumatico.getTipoPiso());
            cmbTipoPisoInicial.setSelectedItem(neumatico.getIdTipoPisoInicial());
            cmbMedida.setSelectedItem(neumatico.getIdModelo());
            cmbTipoBandaInicial.setSelectedItem(neumatico.getIdBandaInicial());
            cmbTipoBanda.setSelectedItem(neumatico.getIdBanda());
            cmbAlmacenes.setSelectedItem(neumatico.getIdAlmacen());
            txtDireccion.setText(neumatico.getIdAlmacen().getDireccion());
            dateFechaCompra.setDate(neumatico.getFechaCompra());
            txtProfundidad.setText("" + neumatico.getProfunidad());
            spnRenovaciones.setValue(neumatico.getNumRenovaciones());
            spnDespinches.setValue(neumatico.getNumDespinches());
            txtRecorrido.setText("" + neumatico.getDistanciaRecorrida());
            spnNumeroCapas.setValue(neumatico.getNumCapas());
            txtProfundidadMinima.setText("" + neumatico.getProfundidadMinima());
            txtPresionMinima.setText("" + neumatico.getPresionMinima());
            cmbDistribuidores.setSelectedItem(neumatico.getIdDistribuidor());
            txtPrecio.setText("" + neumatico.getPrecio());
            txtGarantiaKM.setText("" + neumatico.getGarantiaKilometros());
            txtGarantiaDias.setText("" + neumatico.getGarantiaDias());
            cmbFormasPago.setSelectedItem(neumatico.getIdFormaPago());
            txtKMMontado.setText((neumatico.getKmAlMontaje() == null) ? "" : neumatico.getKmAlMontaje() + "");
            txtKMUltimaVida.setText((neumatico.getKmRecorridoUltimaVida() == null) ? "" : neumatico.getKmRecorridoUltimaVida() + "");
            int kmTotal = 0;
            if(neumatico.getKmTotal() != null) {
                kmTotal = neumatico.getKmTotal();
            }
            kmTotal += neumatico.getDistanciaRecorrida();
            txtKMTotal.setText(kmTotal + "");
            txtLabradoExterior.setText((neumatico.getLabradoExterior() == null) ? "" : neumatico.getLabradoExterior() + "");
            txtLabradoCentral.setText((neumatico.getLabradoCentral() == null) ? "" : neumatico.getLabradoCentral() + "");
            txtLabradoInterno.setText((neumatico.getLabradoInterno() == null) ? "" : neumatico.getLabradoInterno() + "");
            txtPresionActual.setText((neumatico.getPresionActual() == null) ? "" : neumatico.getPresionActual() + "");
            dateFechaMontaje.setDate(neumatico.getFechaMontaje());
            txpComentarios.setText(neumatico.getComentario());
            if(neumatico.getFechaDevolucion() != null){
                lblFechaDevolucion.setVisible(true);
                dateFechaDevolucion.setVisible(true);
                dateFechaDevolucion.setDate(neumatico.getFechaDevolucion());
            } else {
                lblFechaDevolucion.setVisible(false);
                dateFechaDevolucion.setVisible(false);
            }
            this.neumatico = neumatico;
            this.fila = fila;
            this.buscador = buscador;
            if( id_categoria == Constantes.CATEGORIA_EN_DEVOLUCION){
                GUIUtil.deshabilitarVentana(pnlContenedor.getComponents());
                GUIUtil.deshabilitarVentana(pnlToolBar.getComponents());
            }
            if(Constantes.currentUser.getRol() == Constantes.ROL_ADMINISTRADOR){
                btnACementerio.setVisible(true);
            } else {
                btnACementerio.setVisible(false);
            }
        }
        dateFechaRegistro.setMaxSelectableDate(new Date());
        dateFechaCompra.setMaxSelectableDate(new Date());
        setResizable(false);
        setModal(true);
        pack();
        setLocationRelativeTo(null);
        GUIUtil.addEscapeKey(this);
    }

    private void llenarListasDesplegables() {
        MarcasNeumaticoJpaController dao_marcas = new MarcasNeumaticoJpaController(null);
        AlmacenesJpaController dao_almacenes = new AlmacenesJpaController(null);
        TipoPisoJpaController dao_tipos_piso = new TipoPisoJpaController(null);
        ModelosBandaNeumaticoJpaController dao_bandas = new ModelosBandaNeumaticoJpaController(null);
        DistribuidoresNeumaticosJpaController dao_distribuidores = new DistribuidoresNeumaticosJpaController(null);
        FormasPagoJpaController dao_pagos = new FormasPagoJpaController(null);
        EstadosNeumaticosJpaController dao_estados = new EstadosNeumaticosJpaController(null);
        TiposBandaNeumaticoJpaController dao_tipo_banda = new TiposBandaNeumaticoJpaController(null);
        List<MarcasNeumatico> marcas = dao_marcas.findMarcasNeumaticoEntities();
        List<Almacenes> almacenes = dao_almacenes.findAlmacenesEntities();
        List<TipoPiso> tipos_piso = dao_tipos_piso.findTipoPisoEntities();
        List<ModelosBandaNeumatico> bandas = dao_bandas.findModelosBandaNeumaticoEntities();
        List<DistribuidoresNeumaticos> distribuidores = dao_distribuidores.findDistribuidoresNeumaticosEntities();
        List<FormasPago> pagos = dao_pagos.findFormasPagoEntities();
        List<EstadosNeumaticos> estados = dao_estados.findEstadosNeumaticosEntities();
        List<TiposBandaNeumatico> tipoBandas = dao_tipo_banda.findTiposBandaNeumaticoEntities();
        cmbMarca.setModel(new DefaultComboBoxModel(marcas.toArray()));
        cmbAlmacenes.setModel(new DefaultComboBoxModel(almacenes.toArray()));
        cmbTipoPiso.setModel(new DefaultComboBoxModel(tipos_piso.toArray()));
        cmbTipoPisoInicial.setModel(new DefaultComboBoxModel(tipos_piso.toArray()));
        cmbMedida.setModel(new DefaultComboBoxModel(bandas.toArray()));
        cmbTipoBandaInicial.setModel(new DefaultComboBoxModel(tipoBandas.toArray()));
        cmbTipoBanda.setModel(new DefaultComboBoxModel(tipoBandas.toArray()));
        cmbDistribuidores.setModel(new DefaultComboBoxModel(distribuidores.toArray()));
        cmbFormasPago.setModel(new DefaultComboBoxModel(pagos.toArray()));
        cmbEstados.setModel(new DefaultComboBoxModel(estados.toArray()));
        Almacenes a = (Almacenes) cmbAlmacenes.getSelectedItem();
        txtDireccion.setText(a.getDireccion());
    }

    private void actualizarNeumatico() {
//        Neumaticos neumatico = new Neumaticos();
        //El neumático va directo a almacén
//        CategoriasJpaController categorias = new CategoriasJpaController(null, null);
//        neumatico.setIdCategoria(categorias.findCategoriasEntities().get(0));
        //---------------------------------
        String codigo = txtCodigo.getText().trim();
        String numero_serie = txtNumeroSerie.getText().trim();
        String numero_factura = txtNumeroFactura.getText().trim();
        String codigo_barras = txtCodigoBarras.getText().trim();
        Date fecha_registro = dateFechaRegistro.getDate();
        Date fecha_compra = dateFechaCompra.getDate();
        MarcasNeumatico marca = (MarcasNeumatico) cmbMarca.getSelectedItem();
        Almacenes almacen = (Almacenes) cmbAlmacenes.getSelectedItem();
        TipoPiso piso = (TipoPiso) cmbTipoPiso.getSelectedItem();
        TipoPiso pisoInicial = (TipoPiso) cmbTipoPisoInicial.getSelectedItem();
        ModelosBandaNeumatico medida = (ModelosBandaNeumatico) cmbMedida.getSelectedItem();
        TiposBandaNeumatico banda = (TiposBandaNeumatico) cmbTipoBanda.getSelectedItem();
        TiposBandaNeumatico bandaInicial = (TiposBandaNeumatico) cmbTipoBandaInicial.getSelectedItem();
        String _profundidad = txtProfundidad.getText();
        String renovaciones = spnRenovaciones.getValue().toString();
        String despinches = spnDespinches.getValue().toString();
        String recorrido = txtRecorrido.getText();
        String numero_capas = spnNumeroCapas.getValue().toString();
        String _profundidad_minima = txtProfundidadMinima.getText();
        String _presion_minima = txtPresionMinima.getText();
        DistribuidoresNeumaticos distribuidor = (DistribuidoresNeumaticos) cmbDistribuidores.getSelectedItem();
        String _precio = txtPrecio.getText();
        FormasPago forma_pago = (FormasPago) cmbFormasPago.getSelectedItem();
        String garantia_dias = txtGarantiaDias.getText();
        String garantia_km = txtGarantiaKM.getText();
        String comentarios = txpComentarios.getText();
        if (codigo != null && !codigo.isEmpty() && codigo.length() <= 20) {
            neumatico.setCodigo(codigo);
        } else {
            JOptionPane.showMessageDialog(this, "El código debe tener una longitud máxima de 10 caracteres.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtCodigo.requestFocusInWindow();
            return;
        }
        if (numero_serie != null && !numero_serie.isEmpty() && numero_serie.length() <= 15) {
            neumatico.setNumSerie(numero_serie);
        } else {
            JOptionPane.showMessageDialog(this, "El número de serie debe tener una longitud máxima de 15 caracteres.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtNumeroSerie.requestFocusInWindow();
            return;
        }
        if (codigo_barras.length() <= 45) {
            neumatico.setCodBarras(codigo_barras);
        } else {
            JOptionPane.showMessageDialog(this, "El código de barras debe tener una longitud máxima de 45 caracteres.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtNumeroSerie.requestFocusInWindow();
            return;
        }
        if (numero_factura.length() <= 20) {
            neumatico.setNumFactura(numero_factura);
        } else {
            JOptionPane.showMessageDialog(this, "El número de factura debe tener una longitud máxima de 20 caracteres.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtNumeroSerie.requestFocusInWindow();
            return;
        }
        neumatico.setFechaRegistro(fecha_registro);
        neumatico.setFechaCompra(fecha_compra);
        neumatico.setIdMarca(marca);
        neumatico.setIdAlmacen(almacen);
        neumatico.setTipoPiso(piso);
        neumatico.setIdTipoPisoInicial(pisoInicial);
        neumatico.setIdModelo(medida);
        neumatico.setIdBanda(banda);
        neumatico.setIdBandaInicial(bandaInicial);
        try {
            Double profundidad = Double.parseDouble(_profundidad);
            neumatico.setProfunidad(profundidad);
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para la profundidad debe ser un número.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtProfundidad.requestFocusInWindow();
            return;
        }
        try {
            Integer km = Integer.parseInt(recorrido);
            neumatico.setDistanciaRecorrida(km);
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para la distancia recorrida debe ser un número.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtRecorrido.requestFocusInWindow();
            return;
        }
        try {
            Double profundidad_minima = Double.parseDouble(_profundidad_minima);
            neumatico.setProfundidadMinima(profundidad_minima);
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para la profundidad mínima debe ser un número.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtProfundidadMinima.requestFocusInWindow();
            return;
        }
        try {
            Double presion_minima = Double.parseDouble(_presion_minima);
            neumatico.setPresionMinima(presion_minima);
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para la presión mínima debe ser un número.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtPresionMinima.requestFocusInWindow();
            return;
        }
        neumatico.setIdDistribuidor(distribuidor);
        try {
            Float precio = Float.parseFloat(_precio);
            neumatico.setPrecio(precio);
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para el precio debe ser un número.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtGarantiaKM.requestFocusInWindow();
            return;
        }
        neumatico.setIdFormaPago(forma_pago);
        try {
            Integer g_dias = Integer.parseInt(garantia_dias);
            neumatico.setGarantiaDias(g_dias);
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para la garantía en días debe ser un número.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtGarantiaDias.requestFocusInWindow();
            return;
        }
        try {
            Integer g_km = Integer.parseInt(garantia_km);
            neumatico.setGarantiaKilometros(g_km);
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para la garantía en kilómetros debe ser un número.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            txtGarantiaKM.requestFocusInWindow();
            return;
        }
        try {
            Integer num_reno = Integer.parseInt(renovaciones);
            neumatico.setNumRenovaciones(num_reno);
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para el número de renovaciones debe ser un número.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            spnRenovaciones.requestFocusInWindow();
            return;
        }

        try {
            Integer num_despinches = Integer.parseInt(despinches);
            neumatico.setNumDespinches(num_despinches);
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para el número de renovaciones debe ser un número.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            spnDespinches.requestFocusInWindow();
            return;
        }

        try {
            Integer num_capas = Integer.parseInt(numero_capas);
            neumatico.setNumCapas(num_capas);
        } catch (NumberFormatException e) {
            JOptionPane.showMessageDialog(this, "El valor ingresado para el número de capas debe ser un número.", "Datos incorrectos", JOptionPane.WARNING_MESSAGE);
            spnNumeroCapas.requestFocusInWindow();
            return;
        }
        neumatico.setIdEstado((EstadosNeumaticos) cmbEstados.getSelectedItem());
        NeumaticosJpaController dao_neumatico = new NeumaticosJpaController(null);
        neumatico.setComentario(comentarios);
        neumatico.setIdUsuario(Constantes.currentUser);
        neumatico.setEstado(true);
        neumatico.setFechaInsercionActualizacion(new Date());
        double alturaCentral = (txtLabradoCentral.getText().compareTo("") == 0)? 0 : Double.parseDouble(txtLabradoCentral.getText());
        neumatico.setLabradoCentral(alturaCentral);
        double alturaExterior = (txtLabradoExterior.getText().compareTo("") == 0)? 0 : Double.parseDouble(txtLabradoExterior.getText());
        neumatico.setLabradoExterior(alturaExterior);
        double alturaInterna = (txtLabradoInterno.getText().compareTo("") == 0)? 0 : Double.parseDouble(txtLabradoInterno.getText());
        neumatico.setLabradoInterno(alturaInterna);
        try {
            dao_neumatico.edit(neumatico);
            JOptionPane.showMessageDialog(this, "Los datos del neumático han sido actualizados correctamente.", "Operación finalizada", JOptionPane.INFORMATION_MESSAGE);
            buscador.actualizarNeumatico(neumatico, fila);
//            buscador.llenarTabla(0, "");
            dispose();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(Principal.getInstance(), e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        pnlContenedor = new javax.swing.JPanel();
        pnlInformacionPrincipal = new javax.swing.JPanel();
        lblCodigo = new javax.swing.JLabel();
        txtCodigo = new javax.swing.JTextField();
        lbNumeroSerie = new javax.swing.JLabel();
        txtNumeroSerie = new javax.swing.JTextField();
        lblNumeroFactura = new javax.swing.JLabel();
        txtNumeroFactura = new javax.swing.JTextField();
        lblCodigoBarras = new javax.swing.JLabel();
        txtCodigoBarras = new javax.swing.JTextField();
        lblFechaRegistro = new javax.swing.JLabel();
        dateFechaRegistro = new com.toedter.calendar.JDateChooser();
        lblEstadoNeumatico = new javax.swing.JLabel();
        cmbEstados = new javax.swing.JComboBox();
        panelInformacionTecnica = new javax.swing.JPanel();
        panelInfoTecnica = new javax.swing.JPanel();
        lblMarca = new javax.swing.JLabel();
        pnlMarca = new javax.swing.JPanel();
        cmbMarca = new javax.swing.JComboBox();
        lblTipoPiso = new javax.swing.JLabel();
        pnlTipoPiso = new javax.swing.JPanel();
        cmbTipoPiso = new javax.swing.JComboBox();
        lblBandas = new javax.swing.JLabel();
        pnlMedida = new javax.swing.JPanel();
        cmbMedida = new javax.swing.JComboBox();
        jLabel1 = new javax.swing.JLabel();
        pnlTipoBanda = new javax.swing.JPanel();
        cmbTipoBanda = new javax.swing.JComboBox();
        pnlInformacionAlmacenamiento = new javax.swing.JPanel();
        lblEstadoMedicion = new javax.swing.JLabel();
        txtEstadoMedicion = new javax.swing.JTextField();
        lblAlmacen = new javax.swing.JLabel();
        pnlAlmacen = new javax.swing.JPanel();
        cmbAlmacenes = new javax.swing.JComboBox();
        lblDireccion = new javax.swing.JLabel();
        txtDireccion = new javax.swing.JTextField();
        lblFechaCompra = new javax.swing.JLabel();
        dateFechaCompra = new com.toedter.calendar.JDateChooser();
        tbpInformacionAdicional = new javax.swing.JTabbedPane();
        pnlInformacionInicial = new javax.swing.JPanel();
        pnlCamposInformacionInicial = new javax.swing.JPanel();
        lblProfundidad = new javax.swing.JLabel();
        txtProfundidad = new javax.swing.JTextField();
        lblRenovaciones = new javax.swing.JLabel();
        spnRenovaciones = new javax.swing.JSpinner();
        lblRecorrido = new javax.swing.JLabel();
        txtRecorrido = new javax.swing.JTextField();
        lblNumeroCapas = new javax.swing.JLabel();
        spnNumeroCapas = new javax.swing.JSpinner();
        lblProfundidadMinima = new javax.swing.JLabel();
        txtProfundidadMinima = new javax.swing.JTextField();
        lblPresionMinima = new javax.swing.JLabel();
        txtPresionMinima = new javax.swing.JTextField();
        lblBandas1 = new javax.swing.JLabel();
        cmbTipoBandaInicial = new javax.swing.JComboBox();
        lblBandas2 = new javax.swing.JLabel();
        cmbTipoPisoInicial = new javax.swing.JComboBox();
        lblRecorrido1 = new javax.swing.JLabel();
        spnDespinches = new javax.swing.JSpinner();
        pnlInformacionKilometrajeLabrado = new javax.swing.JPanel();
        pnlDatosKilometrajeLabrado = new javax.swing.JPanel();
        lblKMMontaje = new javax.swing.JLabel();
        txtKMMontado = new javax.swing.JTextField();
        lblKMUltimaVida = new javax.swing.JLabel();
        txtKMUltimaVida = new javax.swing.JTextField();
        lblKMTotal = new javax.swing.JLabel();
        txtKMTotal = new javax.swing.JTextField();
        lblLabradoExterior = new javax.swing.JLabel();
        txtLabradoExterior = new javax.swing.JTextField();
        lblLabradoCentral = new javax.swing.JLabel();
        txtLabradoCentral = new javax.swing.JTextField();
        lblLabradoInterno = new javax.swing.JLabel();
        txtLabradoInterno = new javax.swing.JTextField();
        lblPresionActual = new javax.swing.JLabel();
        txtPresionActual = new javax.swing.JTextField();
        lblFechaMontaje = new javax.swing.JLabel();
        dateFechaMontaje = new com.toedter.calendar.JDateChooser();
        pnlComentarios = new javax.swing.JPanel();
        scrComentarios = new javax.swing.JScrollPane();
        txpComentarios = new javax.swing.JTextPane();
        pnlDistribuidorCostosGarantia = new javax.swing.JPanel();
        lblDistribuidor = new javax.swing.JLabel();
        lblPrecio = new javax.swing.JLabel();
        txtPrecio = new javax.swing.JTextField();
        lblFormaPago = new javax.swing.JLabel();
        cmbFormasPago = new javax.swing.JComboBox();
        lblGarantiaDias = new javax.swing.JLabel();
        txtGarantiaDias = new javax.swing.JTextField();
        lblGarantiaKM = new javax.swing.JLabel();
        txtGarantiaKM = new javax.swing.JTextField();
        cmbDistribuidores = new javax.swing.JComboBox();
        dateFechaDevolucion = new com.toedter.calendar.JDateChooser();
        lblFechaDevolucion = new javax.swing.JLabel();
        toolBarPrincipal = new javax.swing.JToolBar();
        pnlToolBar = new javax.swing.JPanel();
        btnGuardar = new javax.swing.JButton();
        btnUbicacion = new javax.swing.JButton();
        btnABodega = new javax.swing.JButton();
        btnParaReencauche = new javax.swing.JButton();
        btnDevolucion = new javax.swing.JButton();
        btnAStock = new javax.swing.JButton();
        btnACementerio = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();

        setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);
        setTitle(".:: Editor de Neumáticos ::.");

        pnlInformacionPrincipal.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Información Principal", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 12))); // NOI18N
        pnlInformacionPrincipal.setOpaque(false);
        pnlInformacionPrincipal.setLayout(new java.awt.GridLayout(3, 4, 5, 5));

        lblCodigo.setText("<html>Código: <font color=\"red\">(*)</font> </html>");
        pnlInformacionPrincipal.add(lblCodigo);

        txtCodigo.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtCodigoKeyPressed(evt);
            }
        });
        pnlInformacionPrincipal.add(txtCodigo);

        lbNumeroSerie.setText("<html>Número de serie: <font color=\"red\">(*)</font> </html>");
        pnlInformacionPrincipal.add(lbNumeroSerie);

        txtNumeroSerie.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtNumeroSerieKeyPressed(evt);
            }
        });
        pnlInformacionPrincipal.add(txtNumeroSerie);

        lblNumeroFactura.setText("Número de factura:");
        pnlInformacionPrincipal.add(lblNumeroFactura);

        txtNumeroFactura.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtNumeroFacturaKeyPressed(evt);
            }
        });
        pnlInformacionPrincipal.add(txtNumeroFactura);

        lblCodigoBarras.setText("Código de barras:");
        pnlInformacionPrincipal.add(lblCodigoBarras);

        txtCodigoBarras.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtCodigoBarrasKeyPressed(evt);
            }
        });
        pnlInformacionPrincipal.add(txtCodigoBarras);

        lblFechaRegistro.setText("Fecha de registro:");
        pnlInformacionPrincipal.add(lblFechaRegistro);
        pnlInformacionPrincipal.add(dateFechaRegistro);

        lblEstadoNeumatico.setText("Estado del neumático:");
        pnlInformacionPrincipal.add(lblEstadoNeumatico);

        cmbEstados.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbEstados.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbEstadosKeyPressed(evt);
            }
        });
        pnlInformacionPrincipal.add(cmbEstados);

        panelInformacionTecnica.setOpaque(false);
        panelInformacionTecnica.setLayout(new java.awt.GridLayout(1, 2));

        panelInfoTecnica.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Información Técnica", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 12))); // NOI18N
        panelInfoTecnica.setOpaque(false);
        panelInfoTecnica.setLayout(new java.awt.GridLayout(4, 2, 5, 5));

        lblMarca.setText("Marca:");
        panelInfoTecnica.add(lblMarca);

        pnlMarca.setOpaque(false);
        pnlMarca.setLayout(new java.awt.BorderLayout(5, 0));

        cmbMarca.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbMarca.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbMarcaKeyPressed(evt);
            }
        });
        pnlMarca.add(cmbMarca, java.awt.BorderLayout.CENTER);

        panelInfoTecnica.add(pnlMarca);

        lblTipoPiso.setText("Tipo de piso:");
        panelInfoTecnica.add(lblTipoPiso);

        pnlTipoPiso.setOpaque(false);
        pnlTipoPiso.setLayout(new java.awt.BorderLayout(5, 0));

        cmbTipoPiso.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbTipoPiso.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbTipoPisoKeyPressed(evt);
            }
        });
        pnlTipoPiso.add(cmbTipoPiso, java.awt.BorderLayout.CENTER);

        panelInfoTecnica.add(pnlTipoPiso);

        lblBandas.setText("<html>Medida: <font color=\"red\">(*)</font> </html>");
        panelInfoTecnica.add(lblBandas);

        pnlMedida.setOpaque(false);
        pnlMedida.setLayout(new java.awt.BorderLayout(5, 0));

        cmbMedida.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbMedida.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbMedidaKeyPressed(evt);
            }
        });
        pnlMedida.add(cmbMedida, java.awt.BorderLayout.CENTER);

        panelInfoTecnica.add(pnlMedida);

        jLabel1.setText("Tipo de Banda:");
        panelInfoTecnica.add(jLabel1);

        pnlTipoBanda.setLayout(new java.awt.BorderLayout());

        cmbTipoBanda.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbTipoBanda.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbTipoBandaKeyPressed(evt);
            }
        });
        pnlTipoBanda.add(cmbTipoBanda, java.awt.BorderLayout.CENTER);

        panelInfoTecnica.add(pnlTipoBanda);

        panelInformacionTecnica.add(panelInfoTecnica);

        pnlInformacionAlmacenamiento.setBorder(javax.swing.BorderFactory.createTitledBorder(null, "Información de Almacenamiento", javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION, javax.swing.border.TitledBorder.DEFAULT_POSITION, new java.awt.Font("Tahoma", 0, 12))); // NOI18N
        pnlInformacionAlmacenamiento.setOpaque(false);
        pnlInformacionAlmacenamiento.setLayout(new java.awt.GridLayout(4, 2, 5, 5));

        lblEstadoMedicion.setText("Estado de medición:");
        pnlInformacionAlmacenamiento.add(lblEstadoMedicion);

        txtEstadoMedicion.setEditable(false);
        pnlInformacionAlmacenamiento.add(txtEstadoMedicion);

        lblAlmacen.setText("<html>Almacén: <font color=\"red\">(*)</font> </html>");
        pnlInformacionAlmacenamiento.add(lblAlmacen);

        pnlAlmacen.setOpaque(false);
        pnlAlmacen.setPreferredSize(new java.awt.Dimension(149, 20));
        pnlAlmacen.setLayout(new java.awt.BorderLayout(5, 0));

        cmbAlmacenes.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbAlmacenes.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                cmbAlmacenesActionPerformed(evt);
            }
        });
        cmbAlmacenes.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbAlmacenesKeyPressed(evt);
            }
        });
        pnlAlmacen.add(cmbAlmacenes, java.awt.BorderLayout.CENTER);

        pnlInformacionAlmacenamiento.add(pnlAlmacen);

        lblDireccion.setText("Dirección:");
        pnlInformacionAlmacenamiento.add(lblDireccion);

        txtDireccion.setEditable(false);
        txtDireccion.setFont(new java.awt.Font("Tahoma", 0, 10)); // NOI18N
        pnlInformacionAlmacenamiento.add(txtDireccion);

        lblFechaCompra.setText("Fecha de compra:");
        pnlInformacionAlmacenamiento.add(lblFechaCompra);

        dateFechaCompra.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                dateFechaCompraKeyPressed(evt);
            }
        });
        pnlInformacionAlmacenamiento.add(dateFechaCompra);

        panelInformacionTecnica.add(pnlInformacionAlmacenamiento);

        tbpInformacionAdicional.setBackground(new java.awt.Color(188, 211, 226));

        pnlCamposInformacionInicial.setLayout(new java.awt.GridLayout(3, 6, 5, 5));

        lblProfundidad.setText("Profundidad (mm):");
        pnlCamposInformacionInicial.add(lblProfundidad);

        txtProfundidad.setText("0.0");
        txtProfundidad.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtProfundidadKeyPressed(evt);
            }
        });
        pnlCamposInformacionInicial.add(txtProfundidad);

        lblRenovaciones.setText("N° de Reencauches:");
        pnlCamposInformacionInicial.add(lblRenovaciones);

        spnRenovaciones.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                spnRenovacionesKeyPressed(evt);
            }
        });
        pnlCamposInformacionInicial.add(spnRenovaciones);

        lblRecorrido.setText("Recorrido (km):");
        pnlCamposInformacionInicial.add(lblRecorrido);

        txtRecorrido.setText("0");
        txtRecorrido.setSelectionEnd(0);
        txtRecorrido.setSelectionStart(0);
        txtRecorrido.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtRecorridoKeyPressed(evt);
            }
        });
        pnlCamposInformacionInicial.add(txtRecorrido);

        lblNumeroCapas.setText("Número de capas:");
        pnlCamposInformacionInicial.add(lblNumeroCapas);

        spnNumeroCapas.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                spnNumeroCapasKeyPressed(evt);
            }
        });
        pnlCamposInformacionInicial.add(spnNumeroCapas);

        lblProfundidadMinima.setText("Profundidad mínima:");
        pnlCamposInformacionInicial.add(lblProfundidadMinima);

        txtProfundidadMinima.setText("0.0");
        txtProfundidadMinima.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtProfundidadMinimaKeyPressed(evt);
            }
        });
        pnlCamposInformacionInicial.add(txtProfundidadMinima);

        lblPresionMinima.setText("Presion mínima (lb):");
        pnlCamposInformacionInicial.add(lblPresionMinima);

        txtPresionMinima.setText("0.0");
        txtPresionMinima.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtPresionMinimaKeyPressed(evt);
            }
        });
        pnlCamposInformacionInicial.add(txtPresionMinima);

        lblBandas1.setText("Tipo de Banda:");
        pnlCamposInformacionInicial.add(lblBandas1);

        cmbTipoBandaInicial.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbTipoBandaInicial.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbTipoBandaInicialKeyPressed(evt);
            }
        });
        pnlCamposInformacionInicial.add(cmbTipoBandaInicial);

        lblBandas2.setText("Tipo de Piso:");
        pnlCamposInformacionInicial.add(lblBandas2);

        cmbTipoPisoInicial.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbTipoPisoInicial.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbTipoPisoInicialKeyPressed(evt);
            }
        });
        pnlCamposInformacionInicial.add(cmbTipoPisoInicial);

        lblRecorrido1.setText("N° de Despinches:");
        pnlCamposInformacionInicial.add(lblRecorrido1);
        pnlCamposInformacionInicial.add(spnDespinches);

        javax.swing.GroupLayout pnlInformacionInicialLayout = new javax.swing.GroupLayout(pnlInformacionInicial);
        pnlInformacionInicial.setLayout(pnlInformacionInicialLayout);
        pnlInformacionInicialLayout.setHorizontalGroup(
            pnlInformacionInicialLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlInformacionInicialLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(pnlCamposInformacionInicial, javax.swing.GroupLayout.DEFAULT_SIZE, 648, Short.MAX_VALUE)
                .addContainerGap())
        );
        pnlInformacionInicialLayout.setVerticalGroup(
            pnlInformacionInicialLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlInformacionInicialLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(pnlCamposInformacionInicial, javax.swing.GroupLayout.DEFAULT_SIZE, 77, Short.MAX_VALUE)
                .addContainerGap())
        );

        tbpInformacionAdicional.addTab("Información Inicial", pnlInformacionInicial);

        pnlDatosKilometrajeLabrado.setLayout(new java.awt.GridLayout(3, 6, 5, 5));

        lblKMMontaje.setText("Último Km Vehículo:");
        pnlDatosKilometrajeLabrado.add(lblKMMontaje);

        txtKMMontado.setEnabled(false);
        pnlDatosKilometrajeLabrado.add(txtKMMontado);

        lblKMUltimaVida.setText("Km última vida:");
        pnlDatosKilometrajeLabrado.add(lblKMUltimaVida);

        txtKMUltimaVida.setEnabled(false);
        pnlDatosKilometrajeLabrado.add(txtKMUltimaVida);

        lblKMTotal.setText("Km total:");
        pnlDatosKilometrajeLabrado.add(lblKMTotal);

        txtKMTotal.setEnabled(false);
        pnlDatosKilometrajeLabrado.add(txtKMTotal);

        lblLabradoExterior.setText("Altura derecha:");
        pnlDatosKilometrajeLabrado.add(lblLabradoExterior);

        txtLabradoExterior.setEnabled(false);
        pnlDatosKilometrajeLabrado.add(txtLabradoExterior);

        lblLabradoCentral.setText("Altura central:");
        pnlDatosKilometrajeLabrado.add(lblLabradoCentral);

        txtLabradoCentral.setEnabled(false);
        pnlDatosKilometrajeLabrado.add(txtLabradoCentral);

        lblLabradoInterno.setText("Altura izquierda:");
        pnlDatosKilometrajeLabrado.add(lblLabradoInterno);

        txtLabradoInterno.setEnabled(false);
        pnlDatosKilometrajeLabrado.add(txtLabradoInterno);

        lblPresionActual.setText("Presión actual:");
        pnlDatosKilometrajeLabrado.add(lblPresionActual);

        txtPresionActual.setEnabled(false);
        pnlDatosKilometrajeLabrado.add(txtPresionActual);

        lblFechaMontaje.setText("Fecha Montaje:");
        pnlDatosKilometrajeLabrado.add(lblFechaMontaje);

        dateFechaMontaje.setBackground(new java.awt.Color(255, 255, 255));
        dateFechaMontaje.setEnabled(false);
        pnlDatosKilometrajeLabrado.add(dateFechaMontaje);

        javax.swing.GroupLayout pnlInformacionKilometrajeLabradoLayout = new javax.swing.GroupLayout(pnlInformacionKilometrajeLabrado);
        pnlInformacionKilometrajeLabrado.setLayout(pnlInformacionKilometrajeLabradoLayout);
        pnlInformacionKilometrajeLabradoLayout.setHorizontalGroup(
            pnlInformacionKilometrajeLabradoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlInformacionKilometrajeLabradoLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(pnlDatosKilometrajeLabrado, javax.swing.GroupLayout.DEFAULT_SIZE, 648, Short.MAX_VALUE)
                .addContainerGap())
        );
        pnlInformacionKilometrajeLabradoLayout.setVerticalGroup(
            pnlInformacionKilometrajeLabradoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlInformacionKilometrajeLabradoLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(pnlDatosKilometrajeLabrado, javax.swing.GroupLayout.DEFAULT_SIZE, 77, Short.MAX_VALUE)
                .addContainerGap())
        );

        tbpInformacionAdicional.addTab("Información de Kilometraje y Altura", pnlInformacionKilometrajeLabrado);

        pnlComentarios.setBackground(new java.awt.Color(151, 184, 205));
        pnlComentarios.setLayout(new java.awt.BorderLayout());

        scrComentarios.setBackground(new java.awt.Color(151, 184, 205));
        scrComentarios.setViewportView(txpComentarios);

        pnlComentarios.add(scrComentarios, java.awt.BorderLayout.CENTER);

        tbpInformacionAdicional.addTab("Comentarios", pnlComentarios);

        lblDistribuidor.setText("Distribuidor:");

        lblPrecio.setText("Precio:");

        txtPrecio.setText("0.0");
        txtPrecio.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtPrecioKeyPressed(evt);
            }
        });

        lblFormaPago.setText("Forma de pago:");

        cmbFormasPago.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbFormasPago.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbFormasPagoKeyPressed(evt);
            }
        });

        lblGarantiaDias.setText("Garantía (días):");

        txtGarantiaDias.setText("0");
        txtGarantiaDias.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                txtGarantiaDiasKeyPressed(evt);
            }
        });

        lblGarantiaKM.setText("Garantía (km):");

        txtGarantiaKM.setText("0");

        cmbDistribuidores.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Item 1", "Item 2", "Item 3", "Item 4" }));
        cmbDistribuidores.addKeyListener(new java.awt.event.KeyAdapter() {
            public void keyPressed(java.awt.event.KeyEvent evt) {
                cmbDistribuidoresKeyPressed(evt);
            }
        });

        dateFechaDevolucion.setDateFormatString("dd/MM/yyyy");
        dateFechaDevolucion.setEnabled(false);

        lblFechaDevolucion.setText("Fecha devolución:");

        javax.swing.GroupLayout pnlDistribuidorCostosGarantiaLayout = new javax.swing.GroupLayout(pnlDistribuidorCostosGarantia);
        pnlDistribuidorCostosGarantia.setLayout(pnlDistribuidorCostosGarantiaLayout);
        pnlDistribuidorCostosGarantiaLayout.setHorizontalGroup(
            pnlDistribuidorCostosGarantiaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlDistribuidorCostosGarantiaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlDistribuidorCostosGarantiaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pnlDistribuidorCostosGarantiaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                        .addComponent(lblDistribuidor, javax.swing.GroupLayout.PREFERRED_SIZE, 76, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addComponent(lblFormaPago, javax.swing.GroupLayout.Alignment.LEADING))
                    .addComponent(lblFechaDevolucion))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(pnlDistribuidorCostosGarantiaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(pnlDistribuidorCostosGarantiaLayout.createSequentialGroup()
                        .addComponent(dateFechaDevolucion, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(0, 0, Short.MAX_VALUE))
                    .addGroup(pnlDistribuidorCostosGarantiaLayout.createSequentialGroup()
                        .addGroup(pnlDistribuidorCostosGarantiaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(pnlDistribuidorCostosGarantiaLayout.createSequentialGroup()
                                .addComponent(cmbFormasPago, javax.swing.GroupLayout.PREFERRED_SIZE, 112, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                .addComponent(lblGarantiaDias, javax.swing.GroupLayout.PREFERRED_SIZE, 83, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addComponent(txtGarantiaDias, javax.swing.GroupLayout.PREFERRED_SIZE, 118, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(cmbDistribuidores, javax.swing.GroupLayout.PREFERRED_SIZE, 327, javax.swing.GroupLayout.PREFERRED_SIZE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addGroup(pnlDistribuidorCostosGarantiaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING, false)
                            .addComponent(lblPrecio, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                            .addComponent(lblGarantiaKM, javax.swing.GroupLayout.DEFAULT_SIZE, 83, Short.MAX_VALUE))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addGroup(pnlDistribuidorCostosGarantiaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(txtGarantiaKM, javax.swing.GroupLayout.DEFAULT_SIZE, 133, Short.MAX_VALUE)
                            .addComponent(txtPrecio, javax.swing.GroupLayout.DEFAULT_SIZE, 133, Short.MAX_VALUE))))
                .addContainerGap())
        );
        pnlDistribuidorCostosGarantiaLayout.setVerticalGroup(
            pnlDistribuidorCostosGarantiaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlDistribuidorCostosGarantiaLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlDistribuidorCostosGarantiaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                    .addGroup(pnlDistribuidorCostosGarantiaLayout.createSequentialGroup()
                        .addComponent(txtPrecio)
                        .addGap(10, 10, 10)
                        .addComponent(txtGarantiaKM, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(pnlDistribuidorCostosGarantiaLayout.createSequentialGroup()
                        .addGroup(pnlDistribuidorCostosGarantiaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(lblPrecio, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(javax.swing.GroupLayout.Alignment.LEADING, pnlDistribuidorCostosGarantiaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(lblDistribuidor, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(cmbDistribuidores, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)))
                        .addGap(10, 10, 10)
                        .addGroup(pnlDistribuidorCostosGarantiaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(pnlDistribuidorCostosGarantiaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                                .addComponent(lblFormaPago)
                                .addComponent(cmbFormasPago, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addComponent(lblGarantiaDias)
                                .addComponent(txtGarantiaDias, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                            .addComponent(lblGarantiaKM))))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(pnlDistribuidorCostosGarantiaLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(dateFechaDevolucion, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lblFechaDevolucion, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        pnlDistribuidorCostosGarantiaLayout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {lblGarantiaDias, lblGarantiaKM, lblPrecio});

        tbpInformacionAdicional.addTab("Distribuidor, Costos y Garantía", pnlDistribuidorCostosGarantia);

        javax.swing.GroupLayout pnlContenedorLayout = new javax.swing.GroupLayout(pnlContenedor);
        pnlContenedor.setLayout(pnlContenedorLayout);
        pnlContenedorLayout.setHorizontalGroup(
            pnlContenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, pnlContenedorLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(pnlContenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(tbpInformacionAdicional, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 0, Short.MAX_VALUE)
                    .addComponent(panelInformacionTecnica, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addComponent(pnlInformacionPrincipal, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
                .addContainerGap())
        );
        pnlContenedorLayout.setVerticalGroup(
            pnlContenedorLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(pnlContenedorLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(pnlInformacionPrincipal, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(panelInformacionTecnica, javax.swing.GroupLayout.DEFAULT_SIZE, 127, Short.MAX_VALUE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addComponent(tbpInformacionAdicional, javax.swing.GroupLayout.PREFERRED_SIZE, 127, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap())
        );

        getContentPane().add(pnlContenedor, java.awt.BorderLayout.CENTER);

        toolBarPrincipal.setBorder(javax.swing.BorderFactory.createEtchedBorder());
        toolBarPrincipal.setFloatable(false);
        toolBarPrincipal.setRollover(true);
        toolBarPrincipal.setOpaque(false);

        pnlToolBar.setBackground(new java.awt.Color(255, 255, 255));
        pnlToolBar.setLayout(new java.awt.FlowLayout(java.awt.FlowLayout.LEFT));

        btnGuardar.setBackground(new java.awt.Color(255, 204, 102));
        btnGuardar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_save.png"))); // NOI18N
        btnGuardar.setToolTipText("Guardar");
        btnGuardar.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnGuardar.setFocusable(false);
        btnGuardar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnGuardar.setMaximumSize(new java.awt.Dimension(22, 22));
        btnGuardar.setMinimumSize(new java.awt.Dimension(22, 22));
        btnGuardar.setPreferredSize(new java.awt.Dimension(22, 22));
        btnGuardar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnGuardar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnGuardarActionPerformed(evt);
            }
        });
        pnlToolBar.add(btnGuardar);

        btnUbicacion.setBackground(new java.awt.Color(255, 204, 102));
        btnUbicacion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_ubicacion.png"))); // NOI18N
        btnUbicacion.setToolTipText("Ver ubicación");
        btnUbicacion.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnUbicacion.setFocusable(false);
        btnUbicacion.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnUbicacion.setMaximumSize(new java.awt.Dimension(22, 22));
        btnUbicacion.setMinimumSize(new java.awt.Dimension(22, 22));
        btnUbicacion.setPreferredSize(new java.awt.Dimension(22, 22));
        btnUbicacion.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnUbicacion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnUbicacionActionPerformed(evt);
            }
        });
        pnlToolBar.add(btnUbicacion);

        btnABodega.setBackground(new java.awt.Color(255, 204, 102));
        btnABodega.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_bodega.png"))); // NOI18N
        btnABodega.setToolTipText("Enviar a bodega");
        btnABodega.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnABodega.setFocusable(false);
        btnABodega.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnABodega.setMaximumSize(new java.awt.Dimension(22, 22));
        btnABodega.setMinimumSize(new java.awt.Dimension(22, 22));
        btnABodega.setPreferredSize(new java.awt.Dimension(22, 22));
        btnABodega.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnABodega.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnABodegaActionPerformed(evt);
            }
        });
        pnlToolBar.add(btnABodega);

        btnParaReencauche.setBackground(new java.awt.Color(242, 225, 175));
        btnParaReencauche.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        btnParaReencauche.setForeground(new java.awt.Color(51, 0, 255));
        btnParaReencauche.setText("R");
        btnParaReencauche.setToolTipText("Para reencauche");
        btnParaReencauche.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnParaReencauche.setContentAreaFilled(false);
        btnParaReencauche.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnParaReencauche.setMaximumSize(new java.awt.Dimension(22, 22));
        btnParaReencauche.setMinimumSize(new java.awt.Dimension(22, 22));
        btnParaReencauche.setOpaque(true);
        btnParaReencauche.setPreferredSize(new java.awt.Dimension(22, 22));
        btnParaReencauche.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnParaReencauche.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnParaReencaucheActionPerformed(evt);
            }
        });
        pnlToolBar.add(btnParaReencauche);

        btnDevolucion.setBackground(new java.awt.Color(242, 225, 175));
        btnDevolucion.setFont(new java.awt.Font("Tahoma", 1, 11)); // NOI18N
        btnDevolucion.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/back.png"))); // NOI18N
        btnDevolucion.setToolTipText("Devolver por garantía");
        btnDevolucion.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnDevolucion.setContentAreaFilled(false);
        btnDevolucion.setFocusable(false);
        btnDevolucion.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnDevolucion.setMaximumSize(new java.awt.Dimension(22, 22));
        btnDevolucion.setMinimumSize(new java.awt.Dimension(22, 22));
        btnDevolucion.setOpaque(true);
        btnDevolucion.setPreferredSize(new java.awt.Dimension(22, 22));
        btnDevolucion.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnDevolucion.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnDevolucionActionPerformed(evt);
            }
        });
        pnlToolBar.add(btnDevolucion);

        btnAStock.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_estockear.png"))); // NOI18N
        btnAStock.setToolTipText("Regresar a stock");
        btnAStock.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnAStock.setContentAreaFilled(false);
        btnAStock.setMaximumSize(new java.awt.Dimension(22, 22));
        btnAStock.setMinimumSize(new java.awt.Dimension(22, 22));
        btnAStock.setPreferredSize(new java.awt.Dimension(22, 22));
        btnAStock.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAStockActionPerformed(evt);
            }
        });
        pnlToolBar.add(btnAStock);

        btnACementerio.setBackground(new java.awt.Color(255, 204, 102));
        btnACementerio.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_delete.png"))); // NOI18N
        btnACementerio.setToolTipText("Enviar a cementerio");
        btnACementerio.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnACementerio.setFocusable(false);
        btnACementerio.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnACementerio.setMaximumSize(new java.awt.Dimension(22, 22));
        btnACementerio.setMinimumSize(new java.awt.Dimension(22, 22));
        btnACementerio.setPreferredSize(new java.awt.Dimension(22, 22));
        btnACementerio.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnACementerio.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnACementerioActionPerformed(evt);
            }
        });
        pnlToolBar.add(btnACementerio);

        btnEliminar.setBackground(new java.awt.Color(255, 204, 102));
        btnEliminar.setIcon(new javax.swing.ImageIcon(getClass().getResource("/com/camachosanchez/recursos/24_eliminar.png"))); // NOI18N
        btnEliminar.setToolTipText("Eliminar");
        btnEliminar.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0)));
        btnEliminar.setFocusable(false);
        btnEliminar.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
        btnEliminar.setMaximumSize(new java.awt.Dimension(22, 22));
        btnEliminar.setMinimumSize(new java.awt.Dimension(22, 22));
        btnEliminar.setPreferredSize(new java.awt.Dimension(22, 22));
        btnEliminar.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
        btnEliminar.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnEliminarActionPerformed(evt);
            }
        });
        pnlToolBar.add(btnEliminar);

        toolBarPrincipal.add(pnlToolBar);

        getContentPane().add(toolBarPrincipal, java.awt.BorderLayout.PAGE_START);

        pack();
    }// </editor-fold>//GEN-END:initComponents

private void btnGuardarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnGuardarActionPerformed
// TODO add your handling code here:
    if (txtCodigo.getText().isEmpty()) {
        JOptionPane.showMessageDialog(this, "Se requiere un valor como código del neumático.", "Datos incompletos", JOptionPane.WARNING_MESSAGE);
        txtCodigo.requestFocusInWindow();
        return;
    }
    if (txtNumeroSerie.getText().isEmpty()) {
        JOptionPane.showMessageDialog(this, "Se requiere un valor como número de serie del neumático.", "Datos incompletos", JOptionPane.WARNING_MESSAGE);
        txtNumeroSerie.requestFocusInWindow();
        return;
    }
    if (cmbAlmacenes.getSelectedItem() == null) {
        JOptionPane.showMessageDialog(this, "Seleccione un almacén para el neumático. Si no existe uno, ingréselo desde el menú Logística.", "Datos incompletos", JOptionPane.WARNING_MESSAGE);
        cmbAlmacenes.requestFocusInWindow();
        return;
    }
    if (cmbMedida.getSelectedItem() == null) {
        JOptionPane.showMessageDialog(this, "Seleccione una medida para el neumático. Si no existe uno, ingréselo desde el menú Logística.", "Datos incompletos", JOptionPane.WARNING_MESSAGE);
        cmbMedida.requestFocusInWindow();
        return;
    }
    actualizarNeumatico();
}//GEN-LAST:event_btnGuardarActionPerformed

private void txtCodigoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCodigoKeyPressed
// TODO add your handling code here:
    if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
        txtNumeroSerie.requestFocusInWindow();
    }
}//GEN-LAST:event_txtCodigoKeyPressed

private void txtNumeroSerieKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNumeroSerieKeyPressed
// TODO add your handling code here:
    if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
        txtNumeroFactura.requestFocusInWindow();
    }
}//GEN-LAST:event_txtNumeroSerieKeyPressed

private void txtNumeroFacturaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtNumeroFacturaKeyPressed
// TODO add your handling code here:
    if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
        txtCodigoBarras.requestFocusInWindow();
    }
}//GEN-LAST:event_txtNumeroFacturaKeyPressed

private void txtCodigoBarrasKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtCodigoBarrasKeyPressed
// TODO add your handling code here:
    if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
        dateFechaRegistro.requestFocusInWindow();
    }
}//GEN-LAST:event_txtCodigoBarrasKeyPressed

private void btnABodegaActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnABodegaActionPerformed
// TODO add your handling code here:
    //solo está activado este botón para los neumáticos en stock, en reclamo y enviados a reparación
    int opcion = JOptionPane.showConfirmDialog(Principal.getInstance(), "¿Desea enviar el neumático a bodega provisional?", "Advertencia", JOptionPane.YES_NO_OPTION);
    if (opcion == JOptionPane.OK_OPTION) {
        NeumaticosJpaController dao_neumatico = new NeumaticosJpaController(null);
        Categorias categoria = new Categorias();
        categoria.setId(7);//enviado a bodega provisional
        categoria.setNombre("En bodega provisional");
        this.neumatico.setIdCategoria(categoria);
        try {
            dao_neumatico.edit(neumatico);
            JOptionPane.showMessageDialog(this, "El neumático fué enviado a bodega provisional exitosamente.", "Operación finalizada", JOptionPane.INFORMATION_MESSAGE);
            buscador.actualizarNeumatico(neumatico, fila);
            dispose();
        } catch (Exception e) {
            JOptionPane.showMessageDialog(Principal.getInstance(), e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
        }
    }
}//GEN-LAST:event_btnABodegaActionPerformed

    private void dateFechaCompraKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_dateFechaCompraKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtProfundidad.requestFocusInWindow();
        }
    }//GEN-LAST:event_dateFechaCompraKeyPressed

    private void txtProfundidadKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtProfundidadKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            spnRenovaciones.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtProfundidadKeyPressed

    private void spnNumeroCapasKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_spnNumeroCapasKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtProfundidadMinima.requestFocusInWindow();
        }
    }//GEN-LAST:event_spnNumeroCapasKeyPressed

    private void spnRenovacionesKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_spnRenovacionesKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtRecorrido.requestFocusInWindow();
        }
    }//GEN-LAST:event_spnRenovacionesKeyPressed

    private void txtProfundidadMinimaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtProfundidadMinimaKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtPresionMinima.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtProfundidadMinimaKeyPressed

    private void txtRecorridoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtRecorridoKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            spnNumeroCapas.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtRecorridoKeyPressed

    private void cmbDistribuidoresKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbDistribuidoresKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtPrecio.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbDistribuidoresKeyPressed

    private void cmbFormasPagoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbFormasPagoKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtGarantiaDias.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbFormasPagoKeyPressed

    private void txtGarantiaDiasKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtGarantiaDiasKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            txtGarantiaKM.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtGarantiaDiasKeyPressed

    private void txtPrecioKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtPrecioKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            cmbFormasPago.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtPrecioKeyPressed

    private void cmbEstadosKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbEstadosKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            cmbMarca.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbEstadosKeyPressed

    private void cmbMarcaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbMarcaKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            cmbTipoPiso.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbMarcaKeyPressed

    private void cmbTipoPisoKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbTipoPisoKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            cmbMedida.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbTipoPisoKeyPressed

    private void cmbMedidaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbMedidaKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            cmbTipoBanda.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbMedidaKeyPressed

    private void cmbAlmacenesKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbAlmacenesKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            dateFechaCompra.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbAlmacenesKeyPressed

    private void btnEliminarActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnEliminarActionPerformed
        // TODO add your handling code here:
        if (JOptionPane.showConfirmDialog(this, "¿Está seguro que desea eliminar este neumático?") == JOptionPane.YES_OPTION) {
            NeumaticosJdbcControler daoJdbc = new NeumaticosJdbcControler();
            byte estado = daoJdbc.eliminarNeumatico(this.neumatico.getId());
            if (estado == 1) {
                JOptionPane.showMessageDialog(this, "El neumático se encuentra relacionado con otros registros, no puede ser eliminado.", "Error en la eliminación", JOptionPane.ERROR_MESSAGE);
            } else {
                JOptionPane.showMessageDialog(this, "El neumático se ha eliminado de forma segura.", "Operación finalizada", JOptionPane.INFORMATION_MESSAGE);
                buscador.borrarNeumatico(fila);
                dispose();
            }
        }
    }//GEN-LAST:event_btnEliminarActionPerformed

    private void btnUbicacionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnUbicacionActionPerformed
        // TODO add your handling code here:
        if (neumatico.getIdCategoria().getId() == 2) {
            EntityManagerFactory emf;
            emf = JPAUtil.getEntityManagerFactory();
            EntityManager em = emf.createEntityManager();
            Query q = em.createQuery("SELECT C.idVehiculo FROM DetalleControlCambioNeumatico D"
                    + " JOIN D.idControlCambioNeumatico C"
                    + " WHERE D.idNeumatico.id = :idNeumatico ORDER BY C.id DESC");
            q.setParameter("idNeumatico", neumatico.getId());
            q.setMaxResults(1);
            if (!q.getResultList().isEmpty()) {
                Vehiculos tupla = (Vehiculos) q.getSingleResult();
                MontajeDesmontaje montaje = new MontajeDesmontaje(tupla);
                montaje.setIdNeumaticoResaltado(neumatico.getId());
                montaje.setSize(Principal.getInstance().getEscritorio().getSize());
                Principal.getInstance().getEscritorio().add(montaje);
                montaje.setPosiciones(true);
                montaje.setVisible(true);
                montaje.generarEsquemaMontaje();
                montaje.agregarDescripcionNeumaticos();
                try {
                    montaje.setMaximum(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        } else {
            JOptionPane.showMessageDialog(this, "La vista no está disponible. El neumático no está montado en ninguna unidad.");
        }
    }//GEN-LAST:event_btnUbicacionActionPerformed

    private void btnACementerioActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnACementerioActionPerformed
        // TODO add your handling code here:
        int cat = this.neumatico.getIdCategoria().getId();
        switch (cat) {//solo se envía a cementerio si está en stock, enviado a reparación, en reclamo o en bodega provisional
            case 1:
            case 5:
            case 6:
            case 7:
                int opcion = JOptionPane.showConfirmDialog(Principal.getInstance(), "¿Desea enviar el neumático a cementerio?", "Advertencia", JOptionPane.YES_NO_OPTION);
                if (opcion == JOptionPane.OK_OPTION) {
                    NeumaticosJpaController dao_neumatico = new NeumaticosJpaController(null);
                    Categorias categoria = new Categorias();
                    categoria.setId(4);//enviado a cementerio
                    categoria.setNombre("Enviado a cementerio");
                    this.neumatico.setIdCategoria(categoria);
                    try {
                        dao_neumatico.edit(neumatico);
                        JOptionPane.showMessageDialog(this, "El neumático fué dado de baja exitosamente.", "Operación finalizada", JOptionPane.INFORMATION_MESSAGE);
                        buscador.actualizarNeumatico(neumatico, fila);
                        dispose();
                    } catch (Exception e) {
                        JOptionPane.showMessageDialog(Principal.getInstance(), e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                    }
                }
                break;
            case 2:
                JOptionPane.showMessageDialog(this, "El neumático se encuentra montado en un vehículo.\nRealice previamente un desmontaje de éste.", "Operación interrumpida", JOptionPane.INFORMATION_MESSAGE);
                break;
            case 3:
                JOptionPane.showMessageDialog(this, "El neumático ha sido enviado a reencauche,\nRealice previamente una recepción de éste.", "Operación interrumpida", JOptionPane.INFORMATION_MESSAGE);
                break;
            case 4:
                JOptionPane.showMessageDialog(this, "El neumático ya se ha dado de baja.", "Operación interrumpida", JOptionPane.INFORMATION_MESSAGE);
                break;
        }

    }//GEN-LAST:event_btnACementerioActionPerformed

    private void txtPresionMinimaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_txtPresionMinimaKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            cmbTipoBandaInicial.requestFocusInWindow();
        }
    }//GEN-LAST:event_txtPresionMinimaKeyPressed

    private void cmbTipoBandaInicialKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbTipoBandaInicialKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            cmbTipoPisoInicial.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbTipoBandaInicialKeyPressed

    private void cmbAlmacenesActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_cmbAlmacenesActionPerformed
        // TODO add your handling code here:
        Almacenes a = (Almacenes) cmbAlmacenes.getSelectedItem();
        if (a != null) {
            txtDireccion.setText(a.getDireccion());
        }
    }//GEN-LAST:event_cmbAlmacenesActionPerformed

    private void btnAStockActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAStockActionPerformed
        // TODO add your handling code here:
        int opcion = JOptionPane.showConfirmDialog(Principal.getInstance(), "¿Desea regresar el neumático a stock?", "Advertencia", JOptionPane.YES_NO_OPTION);
        if (opcion == JOptionPane.OK_OPTION) {
            NeumaticosJpaController dao_neumatico = new NeumaticosJpaController(null);
            Categorias categoria = new Categorias();
            categoria.setId(1);//en stock
            categoria.setNombre("En Stock");
            this.neumatico.setIdCategoria(categoria);
            try {
                dao_neumatico.edit(neumatico);
                JOptionPane.showMessageDialog(this, "El neumático fué regresado a stock exitosamente.", "Operación finalizada", JOptionPane.INFORMATION_MESSAGE);
                buscador.actualizarNeumatico(neumatico, fila);
                dispose();
            } catch (Exception e) {
                JOptionPane.showMessageDialog(Principal.getInstance(), e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    }//GEN-LAST:event_btnAStockActionPerformed

    private void cmbTipoBandaKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbTipoBandaKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            cmbAlmacenes.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbTipoBandaKeyPressed

    private void cmbTipoPisoInicialKeyPressed(java.awt.event.KeyEvent evt) {//GEN-FIRST:event_cmbTipoPisoInicialKeyPressed
        // TODO add your handling code here:
        if (evt.getKeyCode() == KeyEvent.VK_ENTER) {
            spnDespinches.requestFocusInWindow();
        }
    }//GEN-LAST:event_cmbTipoPisoInicialKeyPressed

    private void btnParaReencaucheActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnParaReencaucheActionPerformed
        // TODO add your handling code here:
        int opcion = JOptionPane.showConfirmDialog(Principal.getInstance(), "¿Desea enviar el neumático a la lista de neumáticos para reencauche?", "Advertencia", JOptionPane.YES_NO_OPTION);
        if (opcion == JOptionPane.OK_OPTION) {
            NeumaticosJpaController dao_neumatico = new NeumaticosJpaController(null);
            Categorias categoria = new Categorias();
            categoria.setId(Constantes.CATEGORIA_PARA_REENCAUCHE);//enviado a la lista de neumáticos para reencauche
            categoria.setNombre("Para reencauche");
            this.neumatico.setIdCategoria(categoria);
            try {
                dao_neumatico.edit(neumatico);
                JOptionPane.showMessageDialog(this, "El neumático fué enviado a la lista de neumáticos para reencauche.", "Operación finalizada", JOptionPane.INFORMATION_MESSAGE);
                buscador.actualizarNeumatico(neumatico, fila);
                dispose();
            } catch (Exception e) {
                JOptionPane.showMessageDialog(Principal.getInstance(), e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
            }
        }
    }//GEN-LAST:event_btnParaReencaucheActionPerformed

    private void btnDevolucionActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDevolucionActionPerformed
        // TODO add your handling code here:
        int opcion = JOptionPane.showConfirmDialog(Principal.getInstance(), "¿Desea enviar el neumático a devolución por garantía?", "Advertencia", JOptionPane.YES_NO_OPTION);
        if (opcion == JOptionPane.OK_OPTION) {
            DialogoFechaDevolucion dlgDevolucion = new DialogoFechaDevolucion(Principal.getInstance(), true);
            dlgDevolucion.setVisible(true);
            Date fechaDev = dlgDevolucion.obtenerFecha();
            if (dlgDevolucion.getReturnStatus() == DialogoIngresoEgreso.RET_OK){
                NeumaticosJpaController dao_neumatico = new NeumaticosJpaController(null);
                Categorias categoria = new Categorias();
                categoria.setId(Constantes.CATEGORIA_EN_DEVOLUCION);//enviado a devolución por garantía
                categoria.setNombre("En devolución");
                this.neumatico.setIdCategoria(categoria);
                this.neumatico.setFechaDevolucion(fechaDev);
                try {
                    dao_neumatico.edit(neumatico);
                    JOptionPane.showMessageDialog(this, "El neumático fué enviado a devolución por garantía.", "Operación finalizada", JOptionPane.INFORMATION_MESSAGE);
                    buscador.actualizarNeumatico(neumatico, fila);
                    dispose();
                } catch (Exception e) {
                    JOptionPane.showMessageDialog(Principal.getInstance(), e.getMessage(), "Error", JOptionPane.ERROR_MESSAGE);
                }
            }
        }
    }//GEN-LAST:event_btnDevolucionActionPerformed

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnABodega;
    private javax.swing.JButton btnACementerio;
    private javax.swing.JButton btnAStock;
    private javax.swing.JButton btnDevolucion;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnGuardar;
    private javax.swing.JButton btnParaReencauche;
    private javax.swing.JButton btnUbicacion;
    private javax.swing.JComboBox cmbAlmacenes;
    private javax.swing.JComboBox cmbDistribuidores;
    private javax.swing.JComboBox cmbEstados;
    private javax.swing.JComboBox cmbFormasPago;
    private javax.swing.JComboBox cmbMarca;
    private javax.swing.JComboBox cmbMedida;
    private javax.swing.JComboBox cmbTipoBanda;
    private javax.swing.JComboBox cmbTipoBandaInicial;
    private javax.swing.JComboBox cmbTipoPiso;
    private javax.swing.JComboBox cmbTipoPisoInicial;
    private com.toedter.calendar.JDateChooser dateFechaCompra;
    private com.toedter.calendar.JDateChooser dateFechaDevolucion;
    private com.toedter.calendar.JDateChooser dateFechaMontaje;
    private com.toedter.calendar.JDateChooser dateFechaRegistro;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel lbNumeroSerie;
    private javax.swing.JLabel lblAlmacen;
    private javax.swing.JLabel lblBandas;
    private javax.swing.JLabel lblBandas1;
    private javax.swing.JLabel lblBandas2;
    private javax.swing.JLabel lblCodigo;
    private javax.swing.JLabel lblCodigoBarras;
    private javax.swing.JLabel lblDireccion;
    private javax.swing.JLabel lblDistribuidor;
    private javax.swing.JLabel lblEstadoMedicion;
    private javax.swing.JLabel lblEstadoNeumatico;
    private javax.swing.JLabel lblFechaCompra;
    private javax.swing.JLabel lblFechaDevolucion;
    private javax.swing.JLabel lblFechaMontaje;
    private javax.swing.JLabel lblFechaRegistro;
    private javax.swing.JLabel lblFormaPago;
    private javax.swing.JLabel lblGarantiaDias;
    private javax.swing.JLabel lblGarantiaKM;
    private javax.swing.JLabel lblKMMontaje;
    private javax.swing.JLabel lblKMTotal;
    private javax.swing.JLabel lblKMUltimaVida;
    private javax.swing.JLabel lblLabradoCentral;
    private javax.swing.JLabel lblLabradoExterior;
    private javax.swing.JLabel lblLabradoInterno;
    private javax.swing.JLabel lblMarca;
    private javax.swing.JLabel lblNumeroCapas;
    private javax.swing.JLabel lblNumeroFactura;
    private javax.swing.JLabel lblPrecio;
    private javax.swing.JLabel lblPresionActual;
    private javax.swing.JLabel lblPresionMinima;
    private javax.swing.JLabel lblProfundidad;
    private javax.swing.JLabel lblProfundidadMinima;
    private javax.swing.JLabel lblRecorrido;
    private javax.swing.JLabel lblRecorrido1;
    private javax.swing.JLabel lblRenovaciones;
    private javax.swing.JLabel lblTipoPiso;
    private javax.swing.JPanel panelInfoTecnica;
    private javax.swing.JPanel panelInformacionTecnica;
    private javax.swing.JPanel pnlAlmacen;
    private javax.swing.JPanel pnlCamposInformacionInicial;
    private javax.swing.JPanel pnlComentarios;
    private javax.swing.JPanel pnlContenedor;
    private javax.swing.JPanel pnlDatosKilometrajeLabrado;
    private javax.swing.JPanel pnlDistribuidorCostosGarantia;
    private javax.swing.JPanel pnlInformacionAlmacenamiento;
    private javax.swing.JPanel pnlInformacionInicial;
    private javax.swing.JPanel pnlInformacionKilometrajeLabrado;
    private javax.swing.JPanel pnlInformacionPrincipal;
    private javax.swing.JPanel pnlMarca;
    private javax.swing.JPanel pnlMedida;
    private javax.swing.JPanel pnlTipoBanda;
    private javax.swing.JPanel pnlTipoPiso;
    private javax.swing.JPanel pnlToolBar;
    private javax.swing.JScrollPane scrComentarios;
    private javax.swing.JSpinner spnDespinches;
    private javax.swing.JSpinner spnNumeroCapas;
    private javax.swing.JSpinner spnRenovaciones;
    private javax.swing.JTabbedPane tbpInformacionAdicional;
    private javax.swing.JToolBar toolBarPrincipal;
    private javax.swing.JTextPane txpComentarios;
    private javax.swing.JTextField txtCodigo;
    private javax.swing.JTextField txtCodigoBarras;
    private javax.swing.JTextField txtDireccion;
    private javax.swing.JTextField txtEstadoMedicion;
    private javax.swing.JTextField txtGarantiaDias;
    private javax.swing.JTextField txtGarantiaKM;
    private javax.swing.JTextField txtKMMontado;
    private javax.swing.JTextField txtKMTotal;
    private javax.swing.JTextField txtKMUltimaVida;
    private javax.swing.JTextField txtLabradoCentral;
    private javax.swing.JTextField txtLabradoExterior;
    private javax.swing.JTextField txtLabradoInterno;
    private javax.swing.JTextField txtNumeroFactura;
    private javax.swing.JTextField txtNumeroSerie;
    private javax.swing.JTextField txtPrecio;
    private javax.swing.JTextField txtPresionActual;
    private javax.swing.JTextField txtPresionMinima;
    private javax.swing.JTextField txtProfundidad;
    private javax.swing.JTextField txtProfundidadMinima;
    private javax.swing.JTextField txtRecorrido;
    // End of variables declaration//GEN-END:variables
}
